#include <jni.h>
#include <cstring>
extern "C"{
#include "l_structure.h"
#include "l_memory.h"
#include "l_simple.h"
}

using namespace std;

extern "C"
JNIEXPORT jstring
JNICALL
Java_ldk_learning_jni_JNIHelper_stringFromJNI(
     JNIEnv *env, jobject obj){
	const char* hello = "Hello From C++, \n中文回车等都很好";
	return env->NewStringUTF(hello);
}

extern "C"
JNIEXPORT void
JNICALL
Java_ldk_learning_jni_JNIHelper_testStringFunction(
	JNIEnv *env,
	jobject obj){
	
	char str1[12] = "Hello";
	char str2[12] = "World";
	char str3[12];

	int len;

	/* copy str1 into str3  */
	strcpy(str3, str1);
	printf("strcpy( str3, str1): %s\n", str3);

	/* concatenates str1 and str2  */
	strcat(str1, str2);
	printf("strcat( str1, str2): %s\n", str1);

	/* total length of str1 after concatenation  */
	len = strlen(str1);
	printf("strlen(str1) : %d\n", len);
}

extern "C"
JNIEXPORT void
JNICALL
Java_ldk_learning_jni_JNIHelper_testStructureFunction(
	JNIEnv *env, jobject obj){
	accessStructureMembers();
}

extern "C"
JNIEXPORT void
JNICALL
Java_ldk_learning_jni_JNIHelper_testMemoryFunction(
	JNIEnv *env, jobject obj){
	testMemory();
}

extern "C"
JNIEXPORT void
JNICALL
Java_ldk_learning_jni_JNIHelper_testFieldsFunction(
	JNIEnv *env, jobject obj){
	testBitFields();
}
